// Copyright (C) 2022 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
//
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<广西木子科技有限公司>，授权编号：<NT220402151538>，代码指纹：<A.648883738.885>，技术对接人微信：<ID: Lingmuziyi>】
// 【授权寄送：<收件：李先生、地址：南宁市科园西十路11号国电智能大厦1101F、电话：17736659550、邮箱：yingshashou@vip.qq.com>】
//
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
//
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.eva.framework.dto;

import com.eva.epc.common.util.ESerializable;

/**
 * <p>
 * 为了简化系统逻辑，本对象是EVA.EPC框架发送给服务端的唯一对像类型，所以要发送
 * 给服务器的对象都必须是此类（及其子类）的实例.<br>
 * <p>
 * 关于整个MVC框架捕获和处理客户端请求的流程，请参见：{@link com.eva.framework.HttpController}.
 * </p>
 *
 * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
 * @version 1.0
 */
public class DataFromClient implements ESerializable {
    private static final long serialVersionUID = 336408924788567851L;

    /**
     * 客户端是否需要读取服务端返回的数据（对服务端而言就是是否需要写返回写据给客户端
     * ，服务端将据此决定是否要写回数据），本字段对应于 HttpURLConnection.setDoInput(boolean)
     * 并与之保持一致。
     * 注：本字段仅用于底层数据通信，请勿作其它用途！
     */
    protected boolean doInput = true;

    /**
     * 业务处理器id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    protected int processorId = -9999999;
    /**
     * 作业调度器id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    protected int jobDispatchId = -9999999;
    /**
     * 动作id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    protected int actionId = -9999999;

    /**
     * 具体业务中：客端发送过来的本次修改新数据(可能为空，理论上与oldData不会同时空）
     */
    protected Object newData;
    /**
     * 具体业务中：客端发送过来的本次修改前的老数据(可能为空，理论上与newData不会同时空）
     */
    protected Object oldData;

    /**
     * 可用于REST请求时客户端携带到服务端作为身份验证之用。
     * <p>
     * 本字段可由框架使用者按需使用，非EVA框架必须的。
     *
     * @since 20170223
     */
    protected String token = null;
    protected String userUid = null;

    public String getNotoken() {
        return notoken;
    }

    public void setNotoken(String notoken) {
        this.notoken = notoken;
    }

    protected String notoken = null;    // 是否需要校验token,不需要随便传一个值即可


    public String getInfName() {
        return infName;
    }

    public void setInfName(String infName) {
        this.infName = infName;
    }

    protected String infName = null;


    public String getUserUid() {
        return userUid;
    }

    public void setUserUid(String userUid) {
        this.userUid = userUid;
    }

    /**
     * 发起HTTP请求的设备类型（默认值为-1，表示未定义）.
     * 此字段为保留字段，具体意义由开发者可自行决定。
     * <p>
     * 当前默认的约定是：0 android平台、1 ios平台、2 web平台。
     */
    protected int device = -1;

    /**
     * 一个方便的短方法名的新建本实例的类方法
     */
    public static DataFromClient n() {
        return new DataFromClient();
    }

    /**
     * 获得具体业务中，客端发送过来的本次修改新数据(可能为空，理论上与oldData不会同时空）.
     *
     * @return
     */
    public Object getNewData() {
        return newData;
    }

    /**
     * 设置具体业务中，客端发送过来的本次修改新数据(可能为空，理论上与oldData不会同时空）.
     *
     * @param newData
     * @return
     */
    public DataFromClient setNewData(Object newData) {
        this.newData = newData;
        return this;
    }

    /**
     * 获得具体业务中，客端发送过来的本次修改前的老数据(可能为空，理论上与newData不会同时空）.
     *
     * @return
     */
    public Object getOldData() {
        return oldData;
    }

    /**
     * 设置具体业务中，客端发送过来的本次修改前的老数据(可能为空，理论上与newData不会同时空）.
     *
     * @param oldData
     * @return
     */
    public DataFromClient setOldData(Object oldData) {
        this.oldData = oldData;
        return this;
    }

    /**
     * 业务处理器id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    public int getProcessorId() {
        return processorId;
    }

    /**
     * 业务处理器id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    public DataFromClient setProcessorId(int processorId) {
        this.processorId = processorId;
        return this;
    }

    /**
     * 作业调度器id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    public int getJobDispatchId() {
        return jobDispatchId;
    }

    /**
     * 作业调度器id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    public DataFromClient setJobDispatchId(int jobDispatchId) {
        this.jobDispatchId = jobDispatchId;
        return this;
    }

    /**
     * 动作id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    public int getActionId() {
        return actionId;
    }

    /**
     * 动作id
     *
     * @see com.eva.framework.HttpController.ends.core.Controller
     */
    public DataFromClient setActionId(int actionId) {
        this.actionId = actionId;
        return this;
    }

    /**
     * doInput字段用于底层数据通信时，请勿操作本方法！
     */
    public boolean isDoInput() {
        return doInput;
    }

    /**
     * doInput字段用于底层数据通信时，请勿操作本方法！
     */
    public void setDoInput(boolean doInput) {
        this.doInput = doInput;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public int getDevice() {
        return device;
    }

    public void setDevice(int device) {
        this.device = device;
    }
}
